home *** CD-ROM | disk | FTP | other *** search
/ Sound Fx / Sound Fx.iso / Software / UNZIPED / SBPLY254 / SOURCE.ZIP / SOUND.H < prev   
C/C++ Source or Header  |  1996-06-30  |  14KB  |  360 lines

  1. /* sound.h - header for sound functions                                  */
  2. /* John A. Ball   June 30, 1996                                           */
  3.  
  4. /* Sound Structure used by Sound Player Utility                          */
  5.  
  6. struct SOUND{
  7.     char _far     *buffer;              /* Pointer to sound data         */
  8.     unsigned int  sample_len;           /* Number of bytes to play       */
  9.     unsigned long length;               /* Number of bytes               */
  10.     unsigned long number_samples;       /* Number of PCM Samples         */
  11.     unsigned long frequency;            /* Frequency of playback         */
  12.     unsigned int  volume;               /* Volume to play sample         */
  13.     int           bits;                 /* Bits per Channel & sign       */
  14.     unsigned int  channels;             /* Number of Channels            */
  15.     unsigned int  compression;          /* Type of Hardware Compression  */
  16.     int           byte_format;          /* Intel/Motorola byte format    */
  17.     int (_far *fpcallback)();           /* Pointer to call back function */
  18.     int           file_handle;          /* Source file handle            */
  19.     unsigned long file_type;            /* File type (wav, snd, etc.)    */
  20. };
  21.  
  22. struct CARD_INFO{
  23.     unsigned int card_ver;               /* Driver version number */
  24.     unsigned int type;                  /* Type of Sound Card */
  25.     unsigned int version;               /* Version id of sound card */
  26.     unsigned int io_addr;               /* I/O Address of sound card */
  27.     unsigned int irq;                   /* IRQ used by sound card  */
  28.     unsigned int dma;                   /* DMA channel used by sound card */
  29.     unsigned int mode;                  /* Type of data format */
  30.     unsigned int irq16;                 /* IRQ for 16 bit mode */
  31.     unsigned int dma16;                 /* DMA channel used for 16 bit data */
  32.     char _far    *dma_buffer;           /* Pointer to DMA buffer */
  33.     unsigned int dma_size;              /* Size of DMA buffer */
  34. };
  35.  
  36. struct SND_STATUS{
  37.     int  _far    *pdma_flag;            /* Pointer to DMA in use Flag */
  38.     int          dma_flag;              /* DMA in use FLAG */
  39.     unsigned int dma_count;             /* Remaining count for dma */
  40.     char _far    *buffer;               /* Pointer to next buffer */
  41.     int _far     *perror;               /* Pointer to Error flag */
  42.     int          error;                 /* Soundcard/Driver error flag */
  43. };
  44.  
  45. struct SOUNDOBJ{
  46.     unsigned int mem_type;              /* Conventional, EMS, XMS */
  47.     unsigned int num_blocks;            /* Number of sound blocks */
  48.     int          mem_handle;            /* EMS/XMS Handle  */
  49.     char _far    *mem_array;            /* Pointer to array of pointers or */
  50. };                                      /* EMS buffer page pointer */
  51.  
  52. struct SND_API_ERROR{
  53.     int          api_error;             /* Error number */
  54.     char _far    *api_err_msg;          /* Pointer to error message */
  55. };
  56.  
  57. /* Define Types of Sound Boards/Systems */
  58.  
  59. #define PCSPEAKER        0
  60. #define TANDYSND      0x10
  61. #define BLASTER       0x20
  62. #define BLASTER2      0x21
  63. #define BLASTERPRO    0x22
  64. #define BLASTER16     0x28
  65. #define WSS           0x30
  66. #define DIGPAK        0x40
  67. #define CODEC         0x50
  68.  
  69. /* Define Commands for Sound Driver */
  70.  
  71. #define OPENSND        0x01     /* Open sound driver/device */
  72. #define PLAYSND        0x02     /* Play block of PCM sound data */
  73. #define CLOSESND       0x03     /* Close sound driver/device */
  74. #define STOPSND        0x04     /* Stop sound playing */
  75. #define PAUSESND       0x05     /* Pause sound playing */
  76. #define RESUMESND      0x06     /* Resume sound playing */
  77. #define GET_STATUS     0x07     /* Get status of driver/device */
  78. #define GET_RES_INFO   0x08     /* Get resources used by driver/device */
  79. #define PLAYCSND       0x09     /* Play using continuous DMA mode */
  80. #define SET_VOLUME     0x0A     /* Set the playback volume */
  81.  
  82. /* Define data format & data compression types */
  83.  
  84. #define BIT_PLUS        0x00
  85. #define BIT_MINUS       0x8000
  86. #define BIT8_M  0x01            /* 8 Bit Mono PCM data */
  87. #define BIT8_S  0x02            /* 8 Bit Stereo */
  88. #define BIT16_M 0x04            /* 16 Bit Mono */
  89. #define BIT16_S 0x08            /* 16 Bit Stereo */
  90. #define ULAW    0x10            /* Ulaw Compression */
  91. #define ALAW    0x20            /* Alaw Compression */
  92. #define MSADPCM 0x40            /* Microsoft ADPCM Compression */
  93. #define ADPCM   0x80            /* ADPCM Compression 4-bit */
  94. #define TCOMP   0x100           /* Tandy Compression */
  95. #define ADPCM4  0x200           /* ADPCM 4-bit Compression */
  96. #define ADPCM26 0x400           /* ADPCM 2.6 bit Compression */
  97. #define ADPCM2  0x800           /* ADPCM 2 bit Compression */
  98. #define MACCOMP 0x1000          /* MAC compression */
  99. #define UNKNOWN 0x4000          /* Unknown type compression */
  100. #define INTEL   0x0000          /* Intel byte format for 16 bit sound */
  101. #define MM      0xffff          /* Motorolo byte format for 16 bit sound */
  102.  
  103. /* Sound structure for use by DIGPAK drivers */
  104.  
  105. struct SNDSTRUC{
  106.     unsigned char _far *sound;          /* Pointer to sound data */
  107.     unsigned short sndlen;              /* Length of audio data */
  108.     short _far *IsPlaying;              /* Pointer to play status flag */
  109.     short  frequency;                   /* Playback frequency */
  110. };
  111.  
  112. /* Sound File Formats  */
  113.  
  114. #define TANDY_type 0xffff00ff
  115.  
  116. /* Old Tandy Sound File Format */
  117.  
  118. struct OLDTANDY{
  119.         char id;                        /* 1a */
  120.         char compression;               /* 0 = none */
  121.         char number_clips;
  122.         char voice;
  123.         char name[10];                  /* asciiz */
  124.         unsigned int frequency;
  125. };
  126. struct OLDTANDY_R{
  127.         unsigned long type;             /* ff 00 ff ff */
  128.         unsigned long start;
  129.         unsigned long length;
  130.         unsigned long unknown;
  131.         unsigned long number_samples;
  132.         unsigned long unknown1;
  133.         unsigned long unknown2;
  134. };
  135. /* My version of Deskmate's SND Format */
  136.  
  137. struct TANDY{
  138.     char name[44];                      /* asciiz Instrument or desc */
  139.     unsigned int  id;                   /* 1a 80 for last version */
  140.     unsigned int  number_clips;         /* Sound Count */
  141.     unsigned char voice;                /* Instrument number */
  142.     unsigned char unknown[17];
  143.     unsigned int  compression;          /* Compression Type */
  144.     unsigned char unknown1[20];         /* Compression info */
  145.     unsigned int  frequency;            /* Sampling Rate */
  146.     unsigned char unknown2[24];
  147. };
  148. struct TANDY_R{
  149.     unsigned long link;
  150.     unsigned char unknown1[2];
  151.     unsigned long type;                 /* FF 00 FF FF          */
  152.     unsigned long start;
  153.     unsigned long length;
  154.     unsigned long number_samples;
  155.     unsigned char unknown2[24];
  156. };
  157.  
  158. /* Creative Labs VOC File Format */
  159.  
  160. #define TERMINATE       0x00
  161. #define VOICE           0x01
  162. #define CONTINUE        0x02
  163. #define SILENCE         0x03
  164. #define MARKER          0x04
  165. #define ASCII           0x05
  166. #define REPEAT          0x06
  167. #define VOCEND          0x07
  168. #define EXTEND          0x08
  169. #define NEWVOC          0x09
  170.  
  171. struct LABS{
  172.     char id[19];                        /* "Creative Voice File" */
  173.     char magic;                         /* 1A EOF marker         */
  174.     unsigned int offset;                /* Offset of first Data Block */
  175.     unsigned char minor_version;
  176.     unsigned char major_version;
  177.     unsigned int type;                  /* 2's compliment of Ver # + 1234h */
  178.     };
  179. struct LABSV110{                        /* Type 01 Sound Data    */
  180.     unsigned char number_samples1;
  181.     unsigned char number_samples2;
  182.     unsigned char number_samples3;
  183.     unsigned char frequency;            /* Sample Rate */
  184.     unsigned char compression;          /* Compression Type */
  185. };
  186. struct LABSV120{                        /* Type 09 New Sound Data  */
  187.     unsigned char number_samples1;
  188.     unsigned char number_samples2;
  189.     unsigned char number_samples3;
  190.     unsigned char frequency1;           /* Sample Rate   */
  191.     unsigned char frequency2;
  192.     char unknown[2];
  193.     unsigned char bits_per_sample;
  194.     unsigned char channels;
  195.     unsigned char compression;
  196.     char reserved[5];
  197. };
  198.  
  199. /* Microsoft WAV File Format */
  200.  
  201. #define RIFF  0x46464952
  202. #define WAVE  0x45564157
  203. #define FMT   0x20746d66
  204. #define WDATA 0x61746164
  205. #define WLIST 0x5453494c
  206. #define INAM  0x494e414d                /* "INAM" Name of Data */
  207. #define ICOP  0x49434f50                /* "ICOP" Copywrite notice */
  208. #define ISFT  0x49534654                /* "ISFT"  Name of Creating Software*/
  209. #define ICRD  0x49435244                /* "ICRD"  Creation Date */
  210. #define FACT  0x74636166                /* "fact" */
  211.  
  212. struct RIFFWAVE{
  213.     unsigned long id;                   /* "RIFF" */
  214.     unsigned long chunk_size;
  215.     unsigned long form_type;            /* "WAVE" */
  216. };
  217. struct SUBCHUNK{
  218.    unsigned long id;
  219.    unsigned long subchunk_size;
  220. };
  221.  
  222. /* Extended WAVE Format */
  223.  
  224. struct WAVEfmt{
  225.    unsigned int format_tag;
  226.    unsigned int channels;
  227.    unsigned long number_samples_per_second;
  228.    unsigned long bytes_per_second;
  229.    unsigned int block_align;
  230.    unsigned int bits_per_sample;
  231.    unsigned int cbsize;
  232.    char         icoef1;
  233.    char         icoef2;
  234. };
  235.  
  236. struct RIFFLIST{
  237.    unsigned long id;                    /* "LIST" */
  238.    unsigned long chunk_size;
  239.    unsigned long form_type;             /* "INFO" */
  240. };
  241.  
  242. struct FACTinfo{
  243.    unsigned long number_samples;
  244. };
  245.  
  246. /* Apple & Electronic Arts IFF files */
  247.  
  248. #define FORM 0x4d524f46
  249. #define SVX  0x58565338
  250. #define VHDR 0x52444856
  251. #define BODY 0x59444f42
  252. #define ANNO 0x4f4e4e41
  253. #define AUTH 0x48545541
  254. #define NAME 0x454D414E
  255. #define AIFF 0x46464941
  256. #define COMM 0x4d4d4f43
  257. #define INST 0x54534e49
  258. #define SSND 0x444e5353
  259.  
  260. struct SOUNDIFF{
  261.     unsigned long id;                   /* "FORM" */
  262.     unsigned long chunk_size;
  263.     unsigned long form_type;            /* "8SVX" */
  264. };
  265.  
  266. struct IFFvhdr{
  267.    unsigned long number_samples;        /* samples 1-shot part */
  268.    unsigned long repeat_samples;        /* samples repeat part */
  269.    unsigned long samples_per_cycle;     /* samples per second if repeat */
  270.    unsigned int samples_per_second;     /* samples per second */
  271.    unsigned char octaves;               /* number of octaves */
  272.    unsigned char compression;           /* 0=none, 1=Fibonacci-delta */
  273.    unsigned long volume;                /* 65536 means full volume */
  274. };
  275.  
  276. struct AIFFCOMM{
  277.    unsigned int channels;               /* number of channels */
  278.    unsigned long number_samples;        /* number of samples */
  279.    unsigned int bits_per_sample;        /* sample width */
  280.    double long frequency;               /* frequency in ieee format */
  281. };
  282.  
  283. /* Amiga Protraker Module Format */
  284.  
  285. #define M_k_ 0x2E4B2E4D                 /* M.K. */
  286. #define FLT4 0x34544C46                 /* FLT4 */
  287.  
  288. struct MODhdr{
  289.     char name[20];                     /* ascii */
  290. };
  291.  
  292. struct MODsample{
  293.     char name[22];                     /* ascii */
  294.     unsigned int number_samples;         /* MM format in Words */
  295.     char finetune;                       /* Fine tune nibble */
  296.     char volume;                         /* Volume 0-64 */
  297.     unsigned int r_start;                /* Repeat point in mm words */
  298.     unsigned int r_length;               /* Repeat length in mm words */
  299. };
  300.  
  301. struct MODsong{
  302.     char s_length;                       /* Song length 1 to 128 */
  303.     char unknown;                        /* frequently 7f */
  304.     char sequence[128];                  /* Play sequences 0-127 */
  305. };
  306.  
  307. struct MODraw{
  308.     char *psam;                          /* Pointer to sample */
  309.     long int number_samples;             /* Number of samples */
  310.     unsigned int frequency;              /* Playback frequency */
  311. };
  312.  
  313. /* Define maximum header size for unknown file types */
  314.  
  315. #define MAX_HEADER 128
  316.  
  317. /* MAC Binary Header Format */
  318.  
  319. struct MACBINARY {
  320.  
  321.    char zerobyte;                        /* always zero */
  322.    char length;                          /* 0 - 31 */
  323.    char name[63];                        /* name and some filler */
  324.    long type;                            /* MAC file type */
  325.    long creator;                         /* MAC file creator */
  326.    char filler[10];
  327.    long datafork_size;                   /* length of MAC data fork */
  328.    long rsrcfork_size;                   /* length of MAC resource fork */
  329.    long creation_date;                   /* time of file's creation */
  330.    long modif_date;                      /* time of file's modification */
  331.    char filler2[29];
  332. };
  333.  
  334. #define MACTYPE 0x44535346
  335. #define HCOM    0x4d4f4348
  336.  
  337. /* SUN au header format */
  338.  
  339. struct SUN {
  340.  
  341.    long id;                              /* .snd */
  342.    long chunk_size;                      /* Size of header */
  343.    long data_size;                       /* Number of samples */
  344.    long compression;                     /* type of encoding */
  345.    long frequency;                       /* Sample rate */
  346.    long channels;                        /* Number of sound channels */
  347. };
  348.  
  349. #define AU_SND  0x646e732e
  350. /* STEVE files header format */
  351.  
  352. struct STEVE {
  353.    char id[5];                          /* STEVE */
  354.    char version;                        /* 1 or 2 */
  355.    char H;                              /* H */
  356.    long number_samples;                 /* Number of samples */
  357.    char filler[19];                     /* Unknown or unused */
  358.    unsigned int frequency;              /* Playback frequency for type 2 */
  359. };
  360.